﻿#include<stdio.h>
#include<string.h>

//地址：数据在内存中的储存位置编号，是常量
//指针：指针的本质就是地址
//指针变量：存储的数据是地址
//类型*  标识符；
//取地址符：&  指针变量取谁的地址，就指向谁,
//*的作用：指针变量的标准，取内容，解应用
//指针变量：占4字节内存
//指针也是有类型，指针的类型就是定义的时候  类型*

void fun(int* x, int* y)//给形参传指针变量x  y
{

	*x = 3;
	*y = 0;//通过指针变量修改变量当中存储的一个数据
}

int main()
{

	/*int a = 10;
	int b = 20;
	fun(&a,&b);
	printf("%d\n%d\n",a,b)*/;
	/*int a = 10;
	float b = 1.2f;

	&a;
	int* a = &a;*/
	//int* p=地址;

	/*int a=10, b=20, c=15;
	int* p1, * p2, * p3;
	p1 = &a;
	p2 = &b;
	p3 = &c;

	printf("%d\n",*p1);*/
	//定义指针的时候要马上给我们的指针变量赋值，防止出现野指针（没有任何指向）
	/*int* a1=NULL;
	float* a2=NULL;
	double* a3=NULL;
	printf("%d\n%d\n%d\n",sizeof(a1),sizeof(a2),sizeof(a3));*/

	//数组名本身就表示是这个数组的首地址
	//int arr[10] = {1,2,3,4,5,6,7,8,9,10};
	//for (int i = 0; i < 10; i++)
	//{
	//	printf("%p\n",&arr[i]);
	//}
	//int* p=arr+4;//初始化
	////p +=9;//指针的偏移 赋值
	////printf("%d\n",*p);


	////常量字符串
	//const char* p1 = "hello";
	//printf("%d\n",sizeof(p1));
	//printf("%d\n",strlen(p1));
	//p1 += 4;
	//printf("%c\n",*p1);


	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	double* p2 = (double*) & arr[0];
	p2++;
	/*int* p3;
	p3++;*/
	char* p4 = (char *)& arr[0];
	p4 += 4;
	printf("%d\n",*((int*)p4));
	return 0;
}